package cn.tedu.oop;
/*本类用于测试构造方法*/
/**
 * 知识点：无参构造方法 无参构造方法 全参构造方法创建和使用
 * */
/*1.存在默认的无参构造方法，当new Person（）时，会调用该构造方法*/
/*2.每一次实例化对象时，都会自动调用构造方法*/
/*3.构造方法也存在重载的现象*/
/*4.如果添加了含参构造，默认的无参构造会被覆盖，所以要注意手动添加无参构造方法*/
/*5.全参构造可以同时完成创建对象和给对象的所有属性赋值 这两个操作*/
public class TestConstructor {
    public static void main(String[] args) {
        /*2.每一次实例化对象时，都会自动调用构造方法*/
        Person p1=new Person();
        Person p2=new Person("SpongeBob");
        Person p3=new Person("Kim",18,"Beijing");

        System.out.println("p1.name = " + p1.name);
        System.out.println("p1.age = " + p1.age);
        System.out.println("p1.address = " + p1.address);

        System.out.println("p3.name = " + p3.name);
        System.out.println("p3.age = " + p3.age);
        System.out.println("p3.address = " + p3.address);
        
    }
}
class Person{
    String name;
    int age;
    String address;

    /*1.存在默认的无参构造方法，当new Person（）时，会调用该构造方法*/
    //[右键空白处--Generate]（或Alt+Insert键）--Constructor--光标移动到选最上面的类名，按Ctrl+Enter创建无参构造函数
    public Person() {
        System.out.println("Nonparametric Constructor");
    }
    //重载：同一个类中存在多个方法同名但参数列表不同的情况
    /*3.构造方法也存在重载的现象*/
    /*4.如果添加了含参构造，默认的无参构造会被覆盖，所以要注意手动添加无参构造方法*/
    public Person(String name) {
        this.name = name;
        System.out.println("Constructor with parameter,name = "+this.name);
    }
    /*5.全参构造可以同时完成创建对象和给对象的所有属性赋值 这两个操作*/
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
        System.out.println("Constructor with full parameter");

    }

    public void eat(){
        System.out.println("Eating~~~~~~~");
    }
}
